#include "thread_pool.h"

#include <list>
#include <queue>
#include <mutex>

namespace thread {

class TPThread;
class ThreadTask;

class ThreadPool::ThreadPoolImpl {
 public:
  bool enable_{false};     // 线程池初始化标志
  bool destroyed_{false};  // 线程池销毁标志

  std::string name_{"ThreadPool"};  // 线程名称

  std::queue<std::shared_ptr<ThreadTask>> buffered_list_;  // 任务列表
  std::list<std::shared_ptr<ThreadTask>> finished_list_;  // 完成的任务列表

  std::mutex buffered_mutex_;
  std::mutex finished_mutex_;
  std::mutex state_mutex_;

  std::list<std::shared_ptr<TPThread>> busy_list_;  // 繁忙线程
  std::list<std::shared_ptr<TPThread>> free_list_;  // 空闲线程
  std::list<std::shared_ptr<TPThread>> all_list_;   // 所有线程

  uint32_t max_thread_count_{0};           // 最大允许线程总数
  uint32_t current_thread_count_{0};       // 当前线程总数
  uint32_t current_free_thread_count_{0};  // 当前空闲线程总数
};

}  // namespace thread